<?php

/**
 * 自定义常量
 */
function initUserConstants()
{
	// @tips 获取post  json格式的参数： 后续再思考下怎么和框架底层的Request兼容 vendor/symfony/http-foundation/Request.php:1567
	$params              = file_get_contents('php://input');
	$fileGetContentsData = json_decode($params, true);

	/**
	 * 当前时间
	 */
	if (!defined('TIME_NOW')) {
		define('TIME_NOW', time());
	}

	if (!defined('DATE_NOW')) {
		define('DATE_NOW', formatLongDate());
	}

	/**
	 * 当前页
	 */
	if (!defined('CURRENT_PAGE')) {
		if (!empty($fileGetContentsData) && isset($fileGetContentsData['page'])) {
			$_REQUEST['page'] = $fileGetContentsData['page'];
		}

		define('CURRENT_PAGE', intval(max($_REQUEST['page'] ?? 1, 1)));
		unset($_REQUEST['page'], $_GET['page'], $_POST['page']);
	}

	/**
	 * 默认分页大小:
	 * 最小10, 最大 1000
	 */
	if (!defined('PAGE_SIZE')) {
		if (!empty($fileGetContentsData) && isset($fileGetContentsData['pageSize'])) {
			$_REQUEST['pageSize'] = $fileGetContentsData['pageSize'];
		}

		// 边界处理 上限：200，下限：1
		define('PAGE_SIZE', intval(min(max($_REQUEST['pageSize'] ?? 1, 1), 200)));
		unset($_REQUEST['pageSize'], $_GET['pageSize'], $_POST['pageSize']);
	}

	define(
		'NEO_LOGGER_ID', getForgedUniCode()
	);

	/**
	 * 时间戳
	 */
	define('ONE_MINUTE', 60);           // 一分钟的秒数
	define('SECONDS_HOUR', 3600);       // 一小时的秒数
	define('SECONDS_DAY', 86400);       // 一天的秒数
	define('SECONDS_WEEK', 604800);     // 一周的秒数
	define('SECONDS_MONTH', 2592000);   // 一月的秒数(30天)，28,29，31天的特殊场景如有需要，可以拿天的秒数乘 -1month
	define('SECONDS_YEAR', 31536000);   // 一年的秒数(365天)，366天等其他场景，可以拿天的秒数乘或者当前时间 -1year

	/**
	 * 用户
	 */
	define('USER_REGISTER_SOURCE_APP', 1);    // APP用户
	define('USER_REGISTER_SOURCE_SYS', 2);    // 系统马甲号
	define('USER_REGISTER_SOURCE_H5', 3);     // h5注册用户

	define('USER_REGISTER_SOURCE_APP_KEY', 'app'); // APP用户key
	define('USER_REGISTER_SOURCE_SYS_KEY', 'sys'); // 系统马甲号用户key
	define('USER_REGISTER_SOURCE_H5_KEY', 'h5'); // h5注册用户key

	/**
	 * 验证码缓存失效
	 */
	define('SMS_CODE_CACHE_EXPIRED_MINUTE', 5);   // 5分钟


	/**
	 * 性别
	 */
	define('GENDER_UNKNOWN', 0);   // 未知
	define('GENDER_MALE', 1);   // 男性
	define('GENDER_FEMALE', 2); // 女性

	// 定义Redis常默认缓存时间: 一周
	define('REDIS_DEFAULT_TIMEOUT', SECONDS_WEEK);

	//  -------------------- 以下是业务类型的常量 --------------------
	/**
	 * `make_status` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '铸造状态：0-未铸造、1-铸造中、2-已铸造、3-铸造失败',
	 */
	define('MAKE_STATUS_NO_CAST', 0); // 未铸造
	define('MAKE_STATUS_CASTING', 1); // 铸造中
	define('MAKE_STATUS_CAST', 2); // 已铸造
	define('MAKE_STATUS_CAST_FAIL', 3); // 铸造失败
}
